package com.armed.ejb.entities;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Class Personas
 *
 *
 * @author init() software
 * @version 08/02/2008 
 */
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name = "PERSONAS")
@NamedQueries({@NamedQuery(name = "Personas.findByNombre", query = "SELECT p FROM Personas p WHERE p.nombre = :nombre"), @NamedQuery(name = "Personas.findByApellido", query = "SELECT p FROM Personas p WHERE p.apellido = :apellido"), @NamedQuery(name = "Personas.findByFechaNacimiento", query = "SELECT p FROM Personas p WHERE p.fechaNacimiento = :fechaNacimiento"), @NamedQuery(name = "Personas.findByTipoDocumento", query = "SELECT p FROM Personas p WHERE p.tipoDocumento = :tipoDocumento"), @NamedQuery(name = "Personas.findByNumeroDocumento", query = "SELECT p FROM Personas p WHERE p.numeroDocumento = :numeroDocumento"), @NamedQuery(name = "Personas.findByCuil", query = "SELECT p FROM Personas p WHERE p.cuil = :cuil"), @NamedQuery(name = "Personas.findByMail", query = "SELECT p FROM Personas p WHERE p.mail = :mail"), @NamedQuery(name = "Personas.findByIdPersona", query = "SELECT p FROM Personas p WHERE p.idPersona = :idPersona")})
public class Personas implements Serializable 
{
    private static final long serialVersionUID = 1L;
    @Column(name = "NOMBRE")
    private String nombre;
    @Column(name = "APELLIDO")
    private String apellido;
    @Column(name = "FECHA_NACIMIENTO")
    @Temporal(TemporalType.DATE)
    private Date fechaNacimiento;
    @Column(name = "TIPO_DOCUMENTO")
    private String tipoDocumento;
    @Column(name = "NUMERO_DOCUMENTO")
    private Integer numeroDocumento;
    @Column(name = "CUIL")
    private String cuil;
    @Column(name = "MAIL")
    private String mail;
    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "ID_PERSONA", nullable = false)
    private String idPersona;
    @OneToMany(cascade=CascadeType.ALL)
    private Collection<Telefonos> telefonosCollection;
    @OneToMany(cascade=CascadeType.ALL)
    private Collection<Direcciones> direccionesCollection;
    /** Constructor of Personas */
    public Personas()
    {
    }

    public Personas(String idPersona)
    {
        this.idPersona = idPersona;
    }

    public Personas(Personas person)
    {
        this.nombre = person.nombre;
        this.apellido = person.apellido;
        this.fechaNacimiento = person.fechaNacimiento;
        this.tipoDocumento = person.tipoDocumento;
        this.numeroDocumento = person.numeroDocumento;
        this.cuil = person.cuil;
        this.mail = person.mail;
        this.idPersona = person.idPersona;
        this.telefonosCollection = person.telefonosCollection;
        this.direccionesCollection = person.direccionesCollection;
    }

    public String getNombre()
    {
        return nombre;
    }

    public void setNombre(String nombre)
    {
        this.nombre = nombre;
    }

    public String getApellido()
    {
        return apellido;
    }

    public void setApellido(String apellido)
    {
        this.apellido = apellido;
    }

    public Date getFechaNacimiento()
    {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento)
    {
        this.fechaNacimiento = fechaNacimiento;
    }

    public String getTipoDocumento()
    {
        return tipoDocumento;
    }

    public void setTipoDocumento(String tipoDocumento)
    {
        this.tipoDocumento = tipoDocumento;
    }

    public Integer getNumeroDocumento()
    {
        return numeroDocumento;
    }

    public void setNumeroDocumento(Integer numeroDocumento)
    {
        this.numeroDocumento = numeroDocumento;
    }

    public String getCuil()
    {
        return cuil;
    }

    public void setCuil(String cuil)
    {
        this.cuil = cuil;
    }

    public String getMail()
    {
        return mail;
    }

    public void setMail(String mail)
    {
        this.mail = mail;
    }

    public String getIdPersona()
    {
        return idPersona;
    }

    public void setIdPersona(String idPersona)
    {
        this.idPersona = idPersona;
    }

    public Collection<Telefonos> getTelefonosCollection()
    {
        return telefonosCollection;
    }

    public void setTelefonosCollection(Collection<Telefonos> telefonosCollection)
    {
        this.telefonosCollection = telefonosCollection;
    }

    public Collection<Direcciones> getDireccionesCollection()
    {
        return direccionesCollection;
    }

    public void setDireccionesCollection(Collection<Direcciones> direccionesCollection)
    {
        this.direccionesCollection = direccionesCollection;
    }

    @Override
    public int hashCode()
    {
        int hash = 0;
        hash += (idPersona != null ? idPersona.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object)
    {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Personas))
        {
            return false;
        }
        Personas other = (Personas) object;
        if ((this.idPersona == null && other.idPersona != null) || (this.idPersona != null && !this.idPersona.equals(other.idPersona)))
        {
            return false;
        }
        return true;
    }

    @Override
    public String toString()
    {
        return "com.armed.ejb.entities.Personas[idPersona=" + idPersona + "]";
    }
}
